{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "a258f6e6",
   "metadata": {
    "notebookRunGroups": {
     "groupValue": "1"
    }
   },
   "source": [
    "寻找k近邻的最佳参数值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "1197a26f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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OBlfc833ussg5GDyxibFe926dVMFalIHImSITLqxnei3337D+fPn079+9tlnVU+Ik6dFC/mk9uSTT6qCafmdkaEy6fn44osv4FRt27bFww8/rGaNyaxLWVOocuXKqqeMoD7hS+1QxgAgM8kkIDkVX3PN+brLIORgP/74oypelEvWFyyZGeTUno+MSpcurYaD9CEhpwoODsb333+vXqCGDBmCa665Rn1ik8UEnap79+5qOvTEiRPx77//omHDhliwYIHjh5d1UVFRqk5oxowZar0ymTXWsWNHVSfkVHzNNefrLnefJyKignlD8fLK9EFKllmQoXc/Pz8UK1YMy5cv5xA8mQ6DEBERFZpDhw5hw4YNaqhDehaJzIZBiIiIiByL0+eJiIjIsRiEiIiIyLEYhIiIiMixGISIiIjIsRiEiMjyZM8zWZk2o08++QT79u277L6y8nN2qz+fO3fO4+c7ceLEZQvlcesIImtiECIiS5MA89hjj6nF+3QSdGQ39O3bt192f1kYUhaClM0dZRFEucg6N2FhYTh8+LDaFTw3Bw4cUCtIx8XFpX/vs88+U+vjOHHDVSKrYxAiIlOTRfhyW+l8x44duO6661CzZs1MS/YHBASo3c9lY1i56PuCxcTEqL2N2rRpo/bCkkvdunXVRpgjR45Ux8nzyUX2xfrpp58yPZ+EHlk1WQJVaGiout/zzz+v1suR55Ovq1Spgu+++64QzwoRFRRusUFEltW+fXvVM3PmzJn05fj37NmD2bNnq01RZV80fShL9i164403cn28AQMGqMdbt26d+lpCjYQdXWpqKmJjY9W+Yp07d1YBSLaMkJ3nJVDNmzdP3U96lZy8lQSRlTAIEZFlSV3OwoULVSDSt3iQzYO//vprtSms9MwICSqy4WdGK1euVMNiYvfu3eq6QoUKanhMH3KTPcQyBqFx48apn8vQWIkSJdQeWps3b8b+/fvVcFyzZs3U/SZNmoTWrVsX0VkgoqvBoTEisgzpkZGw8eqrr6qvZf+qrMaOHYtbbrklPQTpoaZkyZKZ7pd1aEzIZrInT55UtT7yfRluk/ohIb1E0hsUFBSU/hgSoCRkybCYFGuvX79e9UxJDxURWQODEBFZgvS43HvvvWjatClGjRqV4/369euHxx9/XPXWZAxCvr6+eT6HBCsZDpMi6//7v/9TYSljbdDgwYMREhKS6f69evVCrVq10i9Sn5RdQCMic+LQGBFZgswCW7ZsGY4cOZLp+1IH5O3tfimTXhwJJLLr+aJFi9C1a1fVQ5M1CP3yyy/pRdgHDx5M//6NN96IxYsXY+bMmaoHSDd+/HgVcGTYLaOPP/4YN998c/rXGW8TkfnxYwsRmZ6sByRDUy1atMBHH32U6WcyOysxMVFddBJ6+vfvjwkTJqivJQjpQ1y6du3aYe/eveoiU991MhX/tddeU8XON910U6bHlLqg7Hqg9Gn4cpHaIyKyDvYIEZHpBQYGqunq8fHxqodHhr1kmntuZJaYFDZLvY8UVWd3f6kH2rBhg5pV9uCDD6J79+7o3bu3Goa7/vrrVfF1Xt5//332CBFZGIMQEVkiCEkRslxatWqlpsFLkXJupFhaZm/pgUceQ2zcuBFjxoxRtTwSqqKjo9X3J0+ejMaNG6tQI8Nqa9euxUsvvaQuudX8SI9Q6dKl079OSEgooH81ERUFBiEishSZMXbDDTfgiSeewPnz5y+rEZLvZSQrTstUelnsUA9IXbp0UcXPMl1efPvtt2ravUx5l7D13nvvqQUYO3TogKVLl6qLXmMkvUUyFV9/nux6hKQXSu7jSYE2ERnLy8U14YnIop588kn06dMH4eHh6b0zUuDs7++vprRLHVC5cuVUD48UW+dEps9//vnn2LZtmxoe0wNMSkqK6kFq27ZtpmLshx56CB988IGqGcpu+EwWc5RC7F9//bVQ/t1EVHAYhIjItmTafHYFzkREOgYhIiIicixOnyciIiLHYhAiIiIix2IQIiIiIsdiECIiIiLHYhAiIiIix2IQIiIiIsdiECIiIiLHYhAiIiIiONX/A85sNsis+2ehAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from sklearn.datasets import load_iris\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.ensemble import BaggingClassifier\n",
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.metrics import accuracy_score\n",
    "from sklearn.model_selection import cross_val_score\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "#导入拆分数据集\n",
    "dataset=load_iris\n",
    "x,y=dataset().data,dataset().target   \n",
    "x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=0,test_size=0.5)\n",
    "\n",
    "#k取不同值的情况下，计算模型的预测误差率\n",
    "k_range=range(1,15)\t\t                          #设置k值的取值范围\n",
    "k_error=[]\t                                      #k_error用于保存预测误差率数据\n",
    "for k in k_range:\n",
    "    model=KNeighborsClassifier(n_neighbors=k)\n",
    "    scores=cross_val_score(model,x,y,cv=5,scoring='accuracy') #5折交叉验证\n",
    "    k_error.append(1-scores.mean())\n",
    "\n",
    "    \n",
    "#画图，x轴表示k的取值，y轴表示预测误差率\n",
    "plt.rcParams['font.sans-serif']='Simhei'\n",
    "plt.plot(k_range,k_error,'r-')\n",
    "plt.xlabel('k的取值')\n",
    "plt.ylabel('预测误差率')\n",
    "plt.show() \n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "16068417",
   "metadata": {
    "notebookRunGroups": {
     "groupValue": "1"
    }
   },
   "source": [
    "分别训练k近邻模型，和基于k近邻bagging模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0ef58253",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "k近邻模型预测准确率：0.9333333333333333\n",
      "基于k近邻算法的Bagging模型的预测准确率：0.9466666666666667\n"
     ]
    }
   ],
   "source": [
    "#定义k近邻模型\n",
    "model_knn=KNeighborsClassifier(6)\t\n",
    "#定义bagging模型\t\t\t\t                                                                          \n",
    "model_bagging=BaggingClassifier(KNeighborsClassifier(6),n_estimators=130,max_samples=0.4,max_features=4,random_state=1)\n",
    "\n",
    "#训练模型\n",
    "model_knn.fit(x_train,y_train)\n",
    "model_bagging.fit(x_train,y_train)\n",
    "\n",
    "#评估模型\n",
    "pred_knn=model_knn.predict(x_test)\n",
    "ac_knn=accuracy_score(y_test,pred_knn)\n",
    "print(f\"k近邻模型预测准确率：{ac_knn}\")\n",
    "\n",
    "pred_bagging=model_bagging.predict(x_test)\n",
    "ac_bagging=accuracy_score(y_test,pred_bagging)\n",
    "print(f\"基于k近邻算法的Bagging模型的预测准确率：{ac_bagging}\")\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "AIG241",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.14.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
